redis 与赞和踩

前言

  • 系统到了要实现赞和踩的阶段了;

REDIS

  • 总是听nosql,但还真不懂啊原来nosql真的和传统数据库不一样;是依赖与传统中的集合来的
  • redis的应用与集合的特性
    • hash:在一个hash表里面,键是string,值又是一个hash,然后就可以加很多很多东西;因为hash表本身就可以扩容的嘛;好处就是可以随着对象随便的增多属性或者减少属性;
    • set 和普通的set一样,用于去重,求交集啥的,都是很厉害的;比如我们的点赞功能,把一群人放在一个集合里,算一下有多少,就得到赞数
    • sortedset 排序的set,相当于优先队列,搞个什么排行榜的不错
    • list 一个普通的双向队列,最普通的列表呗
    • kv ,过期时间啥的

      代码

  • 赞与踩
  • 我们实际存了一个hash,键呢就是内容类别+内容编号,比如是问题类,第几个,这样就确定是某一个集合,然后userId作为value,就将用户加入到这个集合中;既然是集合,自然可以去重,交集,并集啥的;

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    @Controller
    public class LikeController {
    private static final Logger logger = LoggerFactory.getLogger(LikeController.class);
    @Autowired
    LikeService likeService;
    @Autowired
    HostHolder hostHolder;
    /**
    * 点赞函数,很简单的代码,判断一下用户登没登陆
    * 然后执行点赞操作,最后返回json串
    * @param commentId
    * @return
    */
    @RequestMapping(path = {"/like"}, method = {RequestMethod.POST})
    @ResponseBody
    public String like(@RequestParam("commentId") int commentId) {
    if (hostHolder.getUser() == null) {
    return WendaUtil.getJSONString(999);
    }
    long likeCount = likeService.like(hostHolder.getUser().getId(), EntityType.ENTITY_COMMENT, commentId);
    return WendaUtil.getJSONString(0, String.valueOf(likeCount));
    }
    /**
    * 踩的操作
    * @param commentId
    * @return
    */
    @RequestMapping(path = {"/dislike"}, method = {RequestMethod.POST})
    @ResponseBody
    public String dislike(@RequestParam("commentId") int commentId) {
    if (hostHolder.getUser() == null) {
    return WendaUtil.getJSONString(999);
    }
    long likeCount = likeService.disLike(hostHolder.getUser().getId(), EntityType.ENTITY_COMMENT, commentId);
    return WendaUtil.getJSONString(0, String.valueOf(likeCount));
    }
    }
  • 建立与redis的连接,然后重写各种方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    @Service
    public class JedisAdapter implements InitializingBean {
    private JedisPool jedisPool;
    private static final Logger logger = LoggerFactory.getLogger(JedisAdapter.class);
    public static void print(int index, Object object) {
    System.out.println(String.format("%d,%s", index, object.toString()));
    }
    @Override
    public void afterPropertiesSet() throws Exception {
    jedisPool = new JedisPool("redis://localhost:6379/10");
    }
    /**
    * 向redis中添加键值对
    * @param key
    * @param value
    * @return
    */
    public long sadd(String key, String value) {
    Jedis jedis = null;
    try {
    jedis = jedisPool.getResource();
    return jedis.sadd(key, value);
    } catch (Exception e) {
    logger.error("发生异常");
    }finally {
    if (jedis != null) {
    jedis.close();
    }
    }
    return 0;
    }
    public long srem(String key, String value) {
    Jedis jedis = null;
    try {
    jedis = jedisPool.getResource();
    return jedis.srem(key, value);
    } catch (Exception e) {
    logger.error("发生异常");
    }finally {
    if (jedis != null) {
    jedis.close();
    }
    }
    return 0;
    }
    public long scard(String key) {
    Jedis jedis = null;
    try {
    jedis = jedisPool.getResource();
    return jedis.scard(key);
    } catch (Exception e) {
    logger.error("发生异常");
    }finally {
    if (jedis != null) {
    jedis.close();
    }
    }
    return 0;
    }
    public boolean sismember(String key,String value) {
    Jedis jedis = null;
    try {
    jedis = jedisPool.getResource();
    return jedis.sismember(key,value);
    } catch (Exception e) {
    logger.error("发生异常");
    }finally {
    if (jedis != null) {
    jedis.close();
    }
    }
    return false;
    }
    }